草庐IT

c++ - 少走弯路的API Hooking

全部标签

c++ - 实现 Halstead 复杂性指标的问题

我目前正在练习一个简单的程序,以理解从Halstead的软件科学中推导出各种指标所涉及的方程式。我确实相信我做的是正确的,但我觉得我还没有注册所有的操作数和运算符,这样我就可以从数学开始了。我正在使用的程序是:/*01*///countshowmanyitemsinsArray[]arealsointArray[]/*02*/intmatched(intsArray[],inttArray[],intsMax,inttMax)/*03*/{/*04*/intcount,i,first,middle,last;/*05*//*06*/for(i=0;i我已经出来了n1=不同运算符的数量=

c++ - 我可以在函数头中包含 cppcheck 抑制吗?

我添加了一个内联注释来抑制函数的cppcheckunusedFunction警告,但我想将其包含在函数头中,以便Doxygen可以记录所有未使用的函数(我正在实现一个API,所以我有许多函数不会在我的源代码中使用)。我不希望抑制所有unusedFunction错误,而是基于每个函数。我想做这样的事情:/***APIfunctiondescription**@paramp1functionpointertothe...*@return0ifsuccessful,-1otherwise.*//cppcheck-suppressunusedFunction*/intCreateTask(Ta

c++ - recvfrom() 是否在出错时修改 src_addr?

我目前正在编写一个供个人使用的小型UDP套接字库,但我一直无法找到这方面的任何文档。我指的函数是ssize_trecvfrom(intsockfd,void*buf,size_tlen,intflags,structsockaddr*src_addr,socklen_t*addrlen);,来自POSIX标题。我想重复使用src_addr结构我传递给recvfrom与sendto一起使用(相同的标题)无论是否recvfrom成功或失败。成功后,它将包含向其发送数据的对等方的地址(在我的用例中只有一个),这是预期的行为;但是,它会生成错误EAGAIN当非阻塞读取失败时,src_addr的

c++ - 是否可以从宏定义宏

这是我的想法。#defineprefix_11#defineprefix_22#defineprefix_33我想使用上面的前缀定义一个宏——比如宏macro_prefix_1macro_prefix_2——我希望它们变成macro_1macro_2等,就像下面的代码#definemacro_##prefix_1I_am_macro_1#definemacro_##prefix_2I_am_macro_2这可能吗? 最佳答案 不幸的是,你想做的事是不可能的。(##)指令不可能在宏声明中使用。只能在定义中使用它。#defineglue

c++ - CMake 包含和源路径与 Windows 目录路径不同

我想用VisualStudio2010/VC10和CMake创建一个库。Windows的树与CMake的项目树不同。问题是CMake不会在VisualStudio中创建带有头文件和源文件的foolib。我无法更改库的树,因为它是一个古老的代码,有很多共享多个包含文件的库。root|-'includes|'-foo.h|-'src|'-libprojects||'-foolib|||'-bin|||'-project||||'-mak100||||'-CMakeLists01.txt|||'-src||||'-CMakeLists02.txt||||'-foo.cxxCMakeLists

c++ - 隔离容易崩溃的 (SEGV) 但将关键的遗留代码加速到单独的二进制文件中

我有一个经过良好测试且没有崩溃的代码库(主要是C++)。大多。代码的一部分——不可替代、难以维护或改进并链接到一个二进制库*——导致所有崩溃。这些不会经常发生,但一旦发生,整个程序就会崩溃。+----------------------+|Shinynewsane||codebase||||+-----------------+|Ifthelegacycodecrashes,||||theentireprogramdoes,too.||LegacyCode||||*Crashprone*||||intabc(data)|||+-----------------+|||+--------

python - 使用 ctypes 捕获 c++ 共享库日志条目

我有一个带有c接口(interface)的cplusplus共享库,它在标准输出中写入日志条目。我在使用ctypes库的python应用程序中使用它。python应用程序使用logging库来写入日志条目。我需要做的是捕获共享库的标准输出条目以使用logging模块写入日志条目。换句话说,我想将c库的stdout条目重定向到logging模块,这样我就可以使用logging来使用它的处理程序写入文件和控制台。我发现可以捕获标准输出(seethisSOquestion),但我只能在c模块调用结束时访问它,因此它对日志记录没有用。我想要一种无阻塞的方式来访问标准输出条目。一个最小的例子如下

c++ - 将结构传递给 dll

我想将几个数据传递给Dll函数,所以我正在考虑创建一个结构并通过如下结构将它们传递给Dll函数:structoptions{intop1,intop2,intop3,char*op4,...char*op10}voiddllFunction(optionsmyOptions)无论开发工具是什么,dll都应该以在Windows平台上工作的方式实现,我想知道:这样发送数据有效吗?请注意,结构成员都是基本的c类型(int、float、double、...)。为什么我担心它?如您所知,不同的编译器以不同的方式实现std类,因此您不能通过dll边界传递std类,但我不确定是否所有编译器都以相同的

c++ - 从非常大的范围返回非重复的随机值

我想要一个函数,它可以从一组n个整数(0到n-1)中产生k个伪随机值,而不重复任何先前的结果。k小于或等于n。O(n)内存是NotAcceptable因为n的大小很大以及我需要重新洗牌的频率。这些是我到目前为止考虑过的方法:数组:通常,如果我想要无重复的随机值,我会打乱一个数组,但那是O(n)内存。n可能太大而无法工作。longnextvalue(void){staticlongarray[4000000000];staticints=0;if(s==0){for(inti=0;in态PRNG:有多种随机数生成器可以设计为具有n的周期。并访问n那个时期的独特状态。最简单的例子是:lon

c++ - 在C/C++中使用stdio文件操作时如何检测磁盘空间不足?

我正在做一个小程序如下:voidreserve_file_space(char*file_path,size_tamount){FILE*fp=fopen(file_path,"w+b");if(!fp){printf("couldnotcreateanewfile\n");return;}intfseek_ret=fseek(fp,amount,SEEK_SET);if(fseek_ret!=0){printf("couldnotseektothedesiredposition\n");fclose(fp);return;}chargarbage=1;size_tret=fwrite